package peace.grapher.chart
{
import flash.display.Sprite;
import flash.geom.Point;

import peace.grapher.Axis;
import peace.grapher.CoordinatePlane;
/**
 * 
 * @author peace
 * 
 */
public class BarChart extends Chart
{
	
	/**
	 * текущая ширина баров; <br>
	 * обычно вычисляется из расстояния между точками
	 */
	protected var barWidth:Number = 0;
	/**
	 * 
	 * @param plane
	 * @param points
	 * @param color
	 * @param thickness
	 * @param alpha
	 * 
	 */
	public function BarChart(plane:CoordinatePlane=null, points:Array=null, color:int=0, thickness:int=1, alpha:Number=1)
	{
		super(plane, points, color, thickness, alpha);
	}
	
	override public function redraw(points:Array=null):void
	{
		// чистим старые бары
		for (;numChildren > 0;) removeChildAt(0);
		
		if (!points) points = this.points;
		if (points.length == 0) return;
		
		// считаем ширину баров
		if (points.length == 1) barWidth = plane.width;
		else
		{
			var xaxis:Axis = plane.xAxis;
			barWidth = xaxis.getGlobalValue(points[1].x) - xaxis.getGlobalValue(points[0].x) - 2;
		}
		
		var p:Point, i:int, b:Sprite;
		var planeHeight:Number = plane.height;
		for (i = 0; i < points.length; i++)
		{
			p = plane.getGlobalPoint(points[i]);
			b = createBar(p);
			addChild(b);
			b.x = p.x - barWidth/2;
			b.y = planeHeight - b.height;
		}
		
	}
	/**
	 * 
	 * @param p
	 * @return 
	 * 
	 */	
	protected function createBar (p:Point):Sprite
	{
		var b:Sprite = new Sprite();
		
		with (b.graphics)
		{
			beginFill(color, alpha_);
			drawRect(0,0,barWidth, plane.height - p.y);
		}
		
		return b;
	}
	
}
}